﻿using SienSchoofsProject.Helpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Mvc;

namespace SienSchoofsProject.Controllers
{
    /// <summary>
    /// De basis controller waarvan alle andere controller geërft hebben
    /// De controller haalt de _culture cookie. Indien deze bestaat, en 
    /// geïmplementeerd is in de cultureHelper, dan zal de huidige culture veranderd worden naar deze culture.
    /// 
    /// Indien de cookie nog niet bestaat, zal de culture van de browser
    /// opgevraagd worden, en zal gekeken worden of deze geïmplementeerd is in de cultureHelper.
    /// Indien  dit zo is zal de culture aangepast worden naar de culture van de browser.
    /// 
    /// Indien de cookie, of de culture van de browser niet geïmplementeerd zijn, zal de default culture 
    /// ingesteld worden, namelijk nl-BE : nederlands
    /// </summary>
    public class BaseController : Controller
    {
        protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
        {
            string cultureName = null;

            // Probeer de culture cookie te lezen van Request
            HttpCookie cultureCookie = Request.Cookies["_culture"];
            if (cultureCookie != null)
                cultureName = cultureCookie.Value;
            else
                cultureName = Request.UserLanguages != null && Request.UserLanguages.Length > 0 ?
                        Request.UserLanguages[0] :  // verkrijg het van HTTP header AcceptLanguages
                        null;
            // Valideer de culture naam
            cultureName = CultureHelper.GetImplementedCulture(cultureName); 

            // Pas the cultures aan van de huidige thread           
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
            Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

            return base.BeginExecuteCore(callback, state);
        }
    }
}
